15-2 YTBz

當伺服器將網頁資訊回傳至用戶端時,通常會在網頁資料之前,先傳送一些表頭資訊,這些資訊可以讓用戶端的瀏覽器知道如何呈現所收到的資料。

下面這個範例,使用 Response.Redirect 來進行轉址:

Example(response/redirect.asp):

在上述範例中,只要使用者任選一個選項,網頁即會轉址到相關的網址。上述範例的原始檔如下:

原始檔(response/redirect.asp):(灰色區域按兩下即可拷貝)
<%@language=JScript%>
<%
x=Request.Form("url")+"";		// 轉成字串
if (x!="undefined")		// 代表由點選表單來重新載入此頁,由此開始轉址
	Response.Redirect(Request.Form("url"));
%>

<%title="Response.Redirect 的範例"%>
<!--#include file="../head.inc"-->
<hr>

請選一個轉址目標:
<form method=post>
<input type=radio name=url value=http://www.ntu.edu.tw onClick="this.form.submit()">台大首頁<br>
<input type=radio name=url value=http://www.nthu.edu.tw onClick="this.form.submit()">清大首頁<br>
<input type=radio name=url value=http://www.google.com onClick="this.form.submit()">Google 搜尋<br>
</form>

<hr>
<!--#include file="../foot.inc"-->

特別要注意的是:Response.Redirect 所包含的資訊都是屬於表頭資訊,在 Response.Buffer = false 的情況下,這些表頭資訊必須出現在任何網頁內容之前,否則就會造成錯誤。(後續會有詳細說明。)

下面這個範例,使用 Response.Charset 傳送網頁文件的編碼資訊:

Example(response/charset.asp):

上述範例的原始檔如下:

原始檔(response/charset.asp):(灰色區域按兩下即可拷貝)
<%@language=JScript%>
<% Response.Charset="x-sjis" %>
<%title="Response.Charset 的範例"%>
<!--#include file="../head.inc"-->
<hr>

<p>This page is encoded in "x-sjis", which is a Japanese character set.
<br>In order to view the following Big5 characters, you need to change the document encoding.
<br>你若看得懂這一句中文,代表你已經將網頁編碼改成「繁體中文 (Big 5)」了!

<hr>
<!--#include file="../foot.inc"-->

在上述範例中,我們經由 Response.Charset="x-sjis" 將文件編碼設定成日文編碼,所以看不到中文。(如果你的系統沒有安裝日文字形,IE 也會詢問是否要安裝日文字形。)只有經由手動將網頁編碼改成「繁體中文 (Big 5)」,才能看的到網頁中的中文。

其實,在上述範例中,網頁所包含的檔案 head.inc 已經有在 meta 標籤內註明 charset=big5,由此可見 IIS 伺服器會以 ASP 程式碼內的 Response.Charset 為主,而忽略 meta 標籤內的設定。

我們也可以使用 Response 物件的 AddHeader 方法來加入表單資訊,例如,在下個範例中,我們在表單資訊定義三秒後轉址,因此下列範例會在三秒後直接轉址到清華大學的首頁,如下:

Example(response/addHeader.asp):

上述範例的原始檔如下:

原始檔(response/addHeader.asp):(灰色區域按兩下即可拷貝)
<%@language=JScript%>
<%Response.AddHeader("Refresh", "3; URL=http://www.csie.ntu.edu.tw");%>
<%title="Response.AddHeader 的範例"%>
<!--#include file="../head.inc"-->
<hr>
此網頁在三秒後會連到台大資工系首頁!
<hr>
<!--#include file="../foot.inc"-->

在上述範例中,使用 AddHeader 所得到的效果,是和下列 HTML 網頁中的 <meta> 標籤所得到的轉址效果是一樣的:

<meta http-equiv="Refresh" content="3; URL=http://www.cs.nthu.edu.tw">

下面這個範例列印出 Response 物件的各個性質的預設值:

Example(response/listResponse.asp):

上述範例的原始檔如下:

原始檔(response/listResponse.asp):(灰色區域按兩下即可拷貝)
<%@language=jscript%>
<%title="印出 Response 物件的各種性質"%>
<!--#include file="../head.inc"-->
<hr>

Response.Buffer = <%=Response.Buffer%><br>
Response.ContentType = <%=Response.ContentType%><br>
Response.Expires = <%=Response.Expires%><br>
Response.ExpiresAbsolute = <%=Response.ExpiresAbsolute%><br>
Response.Status = <%=Response.Status%><br>

<hr>
<!--#include file="../foot.inc"-->

其中 Response.Status 紀錄網頁回傳的狀態,若是「200 OK」,代表一切無誤。其他可能的訊息及相關的說明,請見下列表格:
狀態碼 英文說明 中文說明
2xx Success 網頁傳送完成送達之工作之狀況
200 OK; the request was fulfilled. 網頁傳送完成
201 OK; following a POST command. 網頁傳送完成,以post command 格式傳送
202 OK; accepted for processing, but processing is not completed. 網頁傳送已送達,但程序有問題,無法完整執行程序。
203 OK; partial information--the returned information is only partial. 網頁傳送已送達,但因某些因素只能回傳部分資訊。
204 OK; no response--request received but no information exists to send back. 網頁傳送已送達,但因某些因素無法回傳資訊。
3xx Redirection 建議轉址!
301 Moved--the data requested has a new location and the change is permanent. 您所要求的網址已永久遷移。
302 Found--the data requested has a different URL temporarily. 您所要求的網址暫時遷移。
303 Method--under discussion, a suggestion for the client to try another location. 您所要求的網址目前有所爭議,建議您試試別的位址 。
304 Not Modified--the document has not been modified as expected. 要傳送資料不合規定。
4xx Error seems to be in the client 用戶端疑有錯誤
400 Bad request--syntax problem in the request or it could not be satisfied. 在您request的 語法中有問題,建議您修正,否則可能無法執行。
401 Unauthorized--the client is not authorized to access data. 用戶端未經授權,無法傳接資料。
402 Payment required--indicates a charging scheme is in effect. 目前執行此處需付費
403 Forbidden--access not required even with authorization. 目前此處完全關閉(即使通過認證亦無法通行)
404 Not found--server could not find the given resource. 伺服器無法尋獲資源
5xx Error seems to be in the server 伺服器端疑有錯誤
500 Internal Error--the server could not fulfill the request because of an unexpected condition. 因不名原因,伺服器無法執行用戶端要求
501 Not implemented--the sever does not support the facility requested. 伺服器端在技術上不支援用戶端要求
502 Server overloaded--high load (or servicing) in progress. 伺服器因付載過重,目前無法執行。
503 Gateway timeout--server waited for another service that did not complete in time. 伺服器因處理其他process或等待時間過久而超出時間


JScript 程式設計與應用:用於伺服器端的 ASP 環境